home *** CD-ROM | disk | FTP | other *** search
/ Disc to the Future 2 / Disc to the Future Part II Programmer's Reference (Wayzata Technology)(6013)(1992).bin / MAC / THINKC / 4_0 / DVIM72-M / SET_CHAR.C < prev    next >
Text File  |  1990-04-14  |  3KB  |  115 lines

  1. /**********************************************************************/
  2. /****************************** setchar *******************************/
  3. /**********************************************************************/
  4. #include "dvihead.h"
  5. #include "commands.h"
  6. #include "gendefs.h"
  7. #include "gblprocs.h"
  8. #include "m72.h"
  9. #include "egblvars.h"
  10. #include "mac-specific.h"
  11.  
  12. void
  13. setchar(c, update_h)
  14. register BYTE c;
  15. register BOOLEAN update_h;
  16. {
  17.     register struct char_entry *tcharptr;  /* temporary char_entry pointer */
  18.  
  19.     if (DBGOPT(DBG_SET_TEXT))
  20.     {
  21.     (void)fprintf(stderr,"setchar('");
  22.     if (isprint(c))
  23.         (void)putc(c,stderr);
  24.     else
  25.         (void)fprintf(stderr,"\\%03o",(int)c);
  26.     (void)fprintf(stderr,"'<%d>) (hh,vv) = (%ld,%ld) font name <%s>",
  27.         (int)c, (long)hh, (long)vv, fontptr->n);
  28.     NEWLINE(stderr);
  29.     }
  30.  
  31.     tcharptr = &(fontptr->ch[c]);
  32.     if (((hh - tcharptr->xoffp + tcharptr->pxlw) <= XSIZE)
  33.     && (hh >= 0)
  34.     && (vv <= YSIZE)
  35.     && (vv >= 0))
  36.     {                /* character fits entirely on page */
  37.     moveto( hh, (COORDINATE)(YSIZE-vv));
  38.     dispchar(c);
  39.     }
  40.     else if (DBGOPT(DBG_OFF_PAGE) && !quiet)
  41.     {                /* character is off page -- discard it */
  42.     (void)fprintf(stderr,
  43.         "setchar(): Char %c [10#%3d 8#%03o 16#%02x] off page.",
  44.         isprint(c) ? c : '?',c,c,c);
  45.     NEWLINE(stderr);
  46.     }
  47.  
  48.     if (update_h)
  49.     {
  50.     h += (INT32)tcharptr->tfmw;
  51.     hh += (COORDINATE)tcharptr->pxlw;
  52.     hh = (COORDINATE)(fixpos(hh-lmargin,h,conv) + lmargin);
  53.     }
  54. }
  55.  
  56. /**********************************************************************/
  57. /****************************** setfntnm ******************************/
  58. /**********************************************************************/
  59. void
  60. setfntnm(k)
  61. register INT32 k;
  62.  
  63. /***********************************************************************
  64. This routine is used to specify the  font to be used in printing  future
  65. characters.
  66. ***********************************************************************/
  67.  
  68. {
  69.     register struct font_entry *p;
  70.  
  71.     p = hfontptr;
  72.     while ((p != (struct font_entry *)NULL) && (p->k != k))
  73.     p = p->next;
  74.     if (p == (struct font_entry *)NULL)
  75.     {
  76.     (void)sprintf(message,"setfntnm():  font %ld undefined", k);
  77.     (void)fatal(message);
  78.     }
  79.     else
  80.     fontptr = p;
  81.  
  82. #if    (HPJETPLUS | POSTSCRIPT | IMPRESS | CANON_A2)
  83.     font_switched = TRUE;
  84. #endif
  85.  
  86. }
  87.  
  88. /**********************************************************************/
  89. /****************************** setrule *******************************/
  90. /**********************************************************************/
  91. void
  92. setrule(height, width, update_h)
  93. register UNSIGN32 height, width;
  94. register BOOLEAN update_h;
  95.  
  96. {   /* draw a rule with bottom left corner at (h,v) */
  97.  
  98.     if ((height > 0) && (width > 0))        /* non-empty rule */
  99.  
  100. #if    BBNBITGRAPH
  101.     fillrect(hh+xscreen, YSIZE-vv+yscreen,
  102.         rulepxl(width,conv)  ,  rulepxl(height,conv));
  103. #else
  104.     fillrect(hh, YSIZE-vv,
  105.         rulepxl(width,conv), rulepxl(height,conv));
  106. #endif
  107.  
  108.     if (update_h)
  109.     {
  110.     h += (INT32)width;
  111.     hh += rulepxl(width, conv);
  112.     hh = fixpos(hh-lmargin,h,conv) + lmargin;
  113.     }
  114. }
  115.